import { ref, onMounted, watch } from "vue";
import { defineStore } from "pinia";
import { getPlayHistory, setPlayHistory, getUser } from "../utils/auth";
import { getMusicLikeList, getRecommendMusic } from "@/api/music/index";

interface songInfoType {
  name: string;
  ar: Array<any>;
  al: {
    picUrl: string;
  };
  id: number;
  dt: number;
  songName: string;
}

const useCounterStore = defineStore("counter", () => {
  const userData = ref(""); //用户信息
  const searchInput = ref(null); //搜索的数据状态
  const playList = ref<Array<any>>([]); //播放列表，初始化从播放历史中获取数据
  const playIndex = ref(0); //当前播放的歌曲索引
  const songInfo = ref<songInfoType | null>(null); //播放歌曲的信息，初始化从历史记录中获取第一条信息
  const singerName = ref(""); //歌手名称
  const playSchedule = ref(0); //歌曲播放进度
  const currentTime = ref(0); //获取播放的时间点
  const totalDuration = ref(0); //歌曲总时长
  const songSheetInfo: any = ref(null); //歌单详情
  const musicLikeListId = ref([] as Array<number>); //我喜欢音乐Id列表
  const userSongSheetId = ref(); //用户歌单id
  const userSongSheetName = ref<string>(""); //用户歌单name
  const userSongSheetList = ref([] as any); //用户歌单名称列表

  //初始化
  onMounted(async () => {
    const [p1, p2] = await Promise.all([
      //获取每日推荐歌曲
      getRecommendMusic(),
      //获取用户喜欢的歌曲列表
      getMusicLikeList(getUser().userId),
    ]);
    //判断获取的数据是否成功
    if(p1.code === "success" && p2.code === "success"){
      //将每日推荐歌曲赋值给playList
      playList.value = p1.data.data?.dailySongs;
      //将playList中的第一首歌曲赋值给songInfo
      songInfo.value = playList.value[0];
      //将播放索引赋值为0
      playIndex.value = 0;
       //获取我的喜欢中的歌曲id
      musicLikeListId.value = p2.data?.ids;
    }
    

    // //从本地中获取初始数据
    // playList.value = getPlayHistory() ? getPlayHistory() : [];
    // if (playList.value.length > 0) {
    //   songInfo.value = playList.value[0];
    //   playIndex.value = 0;
    // }
    // //获取我的喜欢中的歌曲id
    // const data = await getMusicLikeList(getUser().userId);
    // if (data.code == "success") {
    //   if (data.data?.ids.length > 0) {
    //     musicLikeListId.value = data.data?.ids;
    //   }
    // }
  });

  // 功能：格式化数字，数字转换为万单位
  function formatNumber(num: number) {
    // 将num转换为数字
    num = Number(num);
    // 如果num为0或者num大于0且小于10000
    if (num == 0 || (num > 0 && num < 10000)) {
      // 返回num的字符串形式
      return num + "";
    } else {
      // 否则，将num除以10000，保留两位小数，并加上“万”
      return (num / 10000).toFixed(2) + "万";
    }
  }
  //将秒转化为时分秒
  // 函数formateTime，用于格式化时间
  // 参数time，表示时间
  // 将time转换为数字
  function formateTime(time: any) {
    time = Number(time);
    // 如果time的值大于3位，则表示为秒，需要除以1000
    if (time.toFixed(0).length > 3) {
      time = time / 1000;
    }
    // 计算小时
    const h = Math.floor(time / 3600);
    // 计算分钟
    const minute = Math.floor((time / 60) % 60);
    // 计算秒
    const second = Math.ceil(time % 60);
    // 小时小于10，则不显示
    const hours: number = h < 10 ? 0 + h : h;
    // 秒大于59，则表示为59
    const formatSecond = second > 59 ? 59 : second;
    // 返回格式化后的时间
    return `${hours > 0 ? `${hours}:` : ""}${
      minute < 10 ? "0" + minute : minute
    }:${formatSecond < 10 ? "0" + formatSecond : formatSecond}`;
  }
  //点击搜索出来的歌曲放入songInfo里面和历史记录里面
  function handlePlaySong(val: any) {
    //判读是否有播放记录
    if (!getPlayHistory()) {
      setPlayHistory([]);
    }
    let playHistory = getPlayHistory();
    //判断是否已经播放过
    const index = playList.value.findIndex((item: any) => item.id === val.id);
    if (index !== -1) {
      playHistory.splice(index, 1);
      playList.value.splice(index, 1);
    }
    //历史记录去重
    playHistory.push(val);
    setPlayHistory(playHistory);
    playList.value.push(val);
    songInfo.value = val;
  }
  //时间戳转换为正常的时间
  // 获取时间戳转换
  const getTimestampConversion = function (timestamp: number) {
    let timeStamp;
    // 获取时间戳长度
    let timeStampLen = timestamp.toString().length;
    // 判断时间戳长度
    if (timeStampLen === 10) {
      // 时间戳为10位需*1000
      timeStamp = timestamp * 1000;
    } else if (timeStampLen === 13) {
      // 时间戳为13位则不需乘1000
      timeStamp = timestamp;
    } else {
      // 其他情况则时间戳不需转换
      timeStamp = timestamp;
    }
    // 创建时间戳
    let date = new Date(timeStamp); // 时间戳为10位需*1000，时间戳为13位的话不需乘1000
    // 获取年份
    let Y = date.getFullYear() + "-";
    // 获取月份
    let M =
      (date.getMonth() + 1 < 10
        ? "0" + (date.getMonth() + 1)
        : date.getMonth() + 1) + "-";
    // 获取日期
    let D =
      date.getDate() < 10 ? "0" + date.getDate() + " " : date.getDate() + " ";
    // 返回转换后的时间戳
    return Y + M + D;
  };
  // 监听歌曲信息，当歌曲信息改变时，更新播放列表的播放索引
  watch(songInfo, () => {
    // 获取播放列表中与歌曲信息id相同的项的索引
    playIndex.value = playList.value.findIndex(
      (item: any) => item.id === songInfo.value?.id
    );
    // console.log(playIndex.value, "当前播放的下标index");
  });

  return {
    formatNumber,
    formateTime,
    handlePlaySong,
    getTimestampConversion,
    totalDuration,
    searchInput,
    userData,
    currentTime,
    playSchedule,
    singerName,
    songInfo,
    playList,
    songSheetInfo,
    musicLikeListId,
    userSongSheetId,
    userSongSheetName,
    playIndex,
    userSongSheetList,
  };
});

export default useCounterStore;
